<?php

// Wenn kein Benutzer eingeloggt ist, dann gibt es hier nichts zu sehen
if (!$userid = getUserID()) {
	return ERR_NOT_LOGGED_IN;
}

// Returndaten vorbereiten
$ret = array();
$ret['filename']   = 'profile.tpl';
$ret['stylesheet'] = 'profile.css';
$ret['data']	   = array();

// Prüfen, ob etwas gesendet wurde
if ('POST' == $_SERVER['REQUEST_METHOD']) {
	
	// Prüfen ob es einen formaction gibt
	if (!isset($_POST['formaction'])) {
		return ERR_FORM_INVALID;
	}
	
	// formaction auslesen
	$formaction = $_POST['formaction'];
	
	// Der Username und die email sollen gespeichert werden
	if (ST_FORM_SAVE_PROFILE == $formaction) {
		
		// Formular und Eingabe pruefen
		{
			// Hat das Formular die richtige Form
			if (!isset($_POST['username'], $_POST['email'], $_POST['password'])) {
				return ERR_FORM_INVALID;
			}
			
			// Prüfen ob alles eingegeben wurde
			if (('' == trim($username = $_POST['username'])) or 
				('' == trim($email = $_POST['email'])) or 
				('' == trim($password = $_POST['password']))) {
				return ERR_FORM_FIELD_NOT_SET;
			}
			
			// Benutzernamen validieren
			if (!preg_match('~\A\S{3,30}\z~', $username)) {
				return ERR_USERNAME_LIMITATIONS;
			}
		}
		
		// Benutzer updaten
		{
			// Userdaten in einen User packen
			$user = new User($userid, $username, $email, $password);

			// UserDAO holen
			$UserDAO = DAOFactory::getInstance('User');
			if (!$UserDAO->update($user)) {
				// Fehler zurückgeben
				return $UserDAO->get_error();
			}
			
			// User sicherheitshalber unsetten
			unset($user);
			
			// UserDAO sicherheitshalber unsetten
			unset($UserDAO);
		}
		
		return INFO_PROFILE_WAS_UPDATED;
	}
	
	// Das Passwort soll geändert werden
	else if (ST_FORM_CHANGE_PASSWORD_ACTION == $formaction) {
		
		// Formular und Eingabe pruefen
		{
			// Hat das Formular die richtige Form
			if (!isset($_POST['old'], $_POST['password'])) {
				return ERR_FORM_INVALID;
			}
			
			// Prüfen ob nues PW zweu Felder hatte
			if (!is_array($_POST['password']) or count($_POST['password']) != 2) {
				return ERR_FORM_INVALID;
			}
			
			// Prüfen ob alles ausgefuellt ist
			if (('' == trim($old = $_POST['old'])) or ('' == trim($password = $_POST['password'][0]))) {
				return ERR_FORM_FIELD_NOT_SET;
			}
		}
		
		// neuen PWs vergleichen
		if ($password != $_POST['password'][1]) {
			return ERR_PASSWORDS_DO_NO_EQUAL;
		}
		
		// Passwort aktualisieren
		{
			// UserDAO holen
			$UserDAO = DAOFactory::getInstance('User');
			
			// User laden 
			if (!$user = $UserDAO->getById($userid)) {
				return $UserDAO->get_error();
			}
			
			// neues pw setzen
			$user->set_password($password);
			
			// Userdaten aktualisieren
			if (!$UserDAO->update($user, $old)) {
				// Fehler zurückgeben
				return $UserDAO->get_error();
			}
			
			// User sicherheitshalber unsetten
			unset($user);
			
			// UserDAO sicherheitshalber unsetten
			unset($UserDAO);
		}
		
		return INFO_PASSWORD_WAS_UPDATED;
	}
	
}

// Profildaten auslesen und aufbereiten
{
	// UserDAO laden
	$UserDAO = DAOFactory::getInstance('User');
	
	// Aktuellen User laden
	if (!$user = $UserDAO->getById($userid)) {
		// Fehler zurückgeben
		return $UserDAO->get_error();
	} 
	
	// Daten in den Returndaten speichern
	$ret['data']['username'] = $user->get_username();
	$ret['data']['email']	 = $user->get_email();
	
	// User sicherheitshalber unsetten
	unset($user);
			
	// UserDAO sicherheitshalber unsetten
	unset($UserDAO);
}

return $ret;
?>